{{#jackson}}
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
{{/jackson}}
{{#withXml}}
{{#jakarta}}
import jakarta.xml.bind.annotation.XmlType;
import jakarta.xml.bind.annotation.XmlEnum;
import jakarta.xml.bind.annotation.XmlEnumValue;
{{/jakarta}}
{{^jakarta}}
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlEnum;
import javax.xml.bind.annotation.XmlEnumValue;
{{/jakarta}}
{{/withXml}}

/**
 * {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{description}}{{/description}}
 */
{{#if withXml}}
@XmlType(name="{{classname}}")
@XmlEnum({{dataType}}.class)
{{/if}}
public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} {
  {{#if gson}}
  {{#allowableValues}}
  {{#enumVars}}
  @SerializedName({{#is ../../this 'integer'}}"{{/is}}{{#is ../../this 'double'}}"{{/is}}{{#is ../../this 'long'}}"{{/is}}{{#is ../../this 'float'}}"{{/is}}{{{value}}}{{#is ../../this 'integer'}}"{{/is}}{{#is ../../this 'double'}}"{{/is}}{{#is ../../this 'long'}}"{{/is}}{{#is ../../this 'float'}}"{{/is}})
  {{#if withXml}}
  @XmlEnumValue({{#value}}{{{value}}}{{/value}}{{^value}}""{{/value}})
  {{/if}}
  {{{name}}}({{#value}}{{{value}}}{{/value}}{{^value}}null{{/value}}){{^@last}},
  {{/@last}}{{#@last}};{{/@last}}
  {{/enumVars}}
  {{/allowableValues}}
  {{/if}}
  {{#unless gson}}
  {{#allowableValues}}
  {{#enumVars}}
  {{#if withXml}}
  @XmlEnumValue({{#value}}{{{value}}}{{/value}}{{^value}}""{{/value}})
  {{/if}}
  {{{name}}}({{#value}}{{{value}}}{{/value}}{{^value}}null{{/value}}){{^@last}},
  {{/@last}}{{#@last}};{{/@last}}
  {{/enumVars}}
  {{/allowableValues}}
  {{/unless}}

  private {{{dataType}}} value;

  {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}({{{dataType}}} value) {
    this.value = value;
  }

  @Override
{{#jackson}}
  @JsonValue
{{/jackson}}  
  public String toString() {
    return String.valueOf(value);
  }

{{#jackson}}
  @JsonCreator
{{/jackson}}
  public static {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} fromValue(String text) {
    for ({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} b : {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.values()) {
      if (String.valueOf(b.value).equals(text)) {
        return b;
      }
    }
    {{^errorOnUnknownEnum}}return null;{{/errorOnUnknownEnum}}{{#errorOnUnknownEnum}}throw new IllegalArgumentException("Unexpected value '" + text + "' for '{{{classname}}}' enum.");{{/errorOnUnknownEnum}}
  }
  
}
